home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
apps
/
sprdshts
/
viscalc.lzh
/
VISCALC
/
GRAM.C
< prev
next >
Wrap
C/C++ Source or Header
|
1985-11-20
|
12KB
|
442 lines
# line 15 "gram.y"
#include "sc.h"
# line 18 "gram.y"
typedef union {
int ival;
double fval;
struct ent *ent;
struct enode *enode;
char *sval;
} YYSTYPE;
# define STRING 257
# define NUMBER 258
# define FNUMBER 259
# define WORD 260
# define COL 261
# define S_FORMAT 262
# define S_LABEL 263
# define S_LEFTSTRING 264
# define S_RIGHTSTRING 265
# define S_GET 266
# define S_PUT 267
# define S_MERGE 268
# define S_LET 269
# define S_WRITE 270
# define S_TBL 271
# define S_PROGLET 272
# define S_COPY 273
# define S_SHOW 274
# define K_FIXED 275
# define K_SUM 276
# define K_PROD 277
# define K_AVE 278
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern short yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval, yyval;
# define YYERRCODE 256
short yyexca[] ={
-1, 1,
0, -1,
-2, 0,
-1, 83,
60, 0,
61, 0,
62, 0,
-2, 34,
-1, 85,
60, 0,
61, 0,
62, 0,
-2, 35,
-1, 86,
60, 0,
61, 0,
62, 0,
-2, 36,
-1, 96,
60, 0,
61, 0,
62, 0,
-2, 39,
-1, 97,
60, 0,
61, 0,
62, 0,
-2, 41,
-1, 98,
60, 0,
61, 0,
62, 0,
-2, 40,
};
# define YYNPROD 43
# define YYLAST 267
short yyact[]={
14, 69, 70, 71, 16, 55, 6, 3, 4, 5,
7, 9, 8, 2, 10, 11, 49, 13, 12, 27,
49, 54, 26, 43, 49, 20, 44, 43, 45, 53,
44, 43, 45, 34, 44, 30, 45, 52, 51, 50,
25, 24, 23, 22, 87, 21, 90, 42, 84, 67,
33, 42, 105, 32, 65, 42, 31, 67, 59, 57,
29, 58, 65, 60, 104, 94, 59, 57, 103, 58,
56, 60, 36, 35, 95, 111, 62, 63, 64, 61,
110, 109, 93, 67, 62, 63, 64, 61, 65, 39,
67, 67, 59, 57, 92, 58, 65, 60, 38, 59,
59, 57, 91, 58, 60, 60, 67, 1, 0, 48,
62, 63, 64, 48, 0, 0, 0, 48, 62, 63,
64, 61, 40, 0, 0, 15, 17, 18, 19, 0,
0, 68, 0, 0, 73, 74, 28, 0, 75, 76,
66, 0, 72, 0, 0, 0, 0, 0, 66, 0,
0, 37, 0, 0, 0, 0, 78, 79, 80, 81,
82, 83, 85, 86, 88, 89, 67, 0, 0, 0,
0, 0, 0, 0, 66, 59, 57, 0, 58, 77,
60, 0, 66, 96, 0, 0, 97, 0, 0, 98,
67, 0, 0, 0, 102, 65, 67, 0, 0, 59,
57, 0, 58, 0, 60, 59, 57, 0, 58, 0,
60, 0, 0, 0, 99, 100, 101, 62, 63, 64,
0, 0, 0, 62, 63, 64, 106, 107, 108, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 46, 47, 0, 16, 46, 47, 0, 16, 46,
47, 0, 16, 0, 0, 0, 0, 0, 41, 0,
0, 0, 41, 0, 0, 0, 41 };
short yypact[]={
-256,-1000,-257,-257,-257,-257,-236,-212,-214,-215,
-216,-217,-239,-257,-1000, -1,-223, -5, -8, -11,
-225,-1000,-1000,-1000,-1000,-1000, 15, 14,-257, -9,
-1000,-218,-219,-220,-229,-240,-253, 12, 58,-1000,
-1000, -9,-275, -9, -9, -9,-1000,-1000, -9, -9,
-1000,-1000,-1000,-1000,-1000,-1000,-257, -9, -9, -9,
-9, -9, -13, -9, -17, -9, -9, -15,-1000, 62,
54, 42, 24,-1000,-1000,-1000,-1000,-1000, 57, 57,
73, 73, 16, 133, -9, 133, 133, -9, 163, 157,
-9,-257,-257,-257,-1000, -9, 133, 133, 133, 10,
6, -6, 50,-257,-257,-257, 40, 39, 34,-1000,
-1000,-1000 };
short yypgo[]={
0, 122, 98, 89, 107 };
short yyr1[]={
0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 1 };
short yyr2[]={
0, 4, 4, 4, 4, 4, 2, 2, 2, 2,
2, 4, 4, 5, 0, 1, 1, 2, 7, 7,
7, 3, 2, 2, 1, 1, 2, 2, 3, 3,
3, 3, 1, 5, 3, 3, 3, 3, 3, 4,
4, 4, 2 };
short yychk[]={
-1000, -4, 269, 263, 264, 265, 262, 266, 268, 267,
270, 271, 274, 273, 256, -1, 261, -1, -1, -1,
261, 257, 257, 257, 257, 257, 261, 258, -1, 61,
258, 61, 61, 61, 258, 58, 58, -1, -2, -3,
-1, 275, 64, 40, 43, 45, 258, 259, 126, 33,
257, 257, 257, 258, 261, 258, 58, 43, 45, 42,
47, 63, 60, 61, 62, 38, 124, 33, -3, 276,
277, 278, -2, -3, -3, -3, -3, -1, -2, -2,
-2, -2, -2, -2, 61, -2, -2, 61, -2, -2,
61, 40, 40, 40, 41, 58, -2, -2, -2, -1,
-1, -1, -2, 58, 58, 58, -1, -1, -1, 41,
41, 41 };
short yydef[]={
14, -2, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
0, 6, 7, 8, 9, 10, 0, 0, 0, 0,
42, 0, 0, 0, 0, 0, 0, 0, 1, 32,
16, 0, 0, 0, 0, 0, 24, 25, 0, 0,
2, 3, 4, 5, 11, 12, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 17, 0,
0, 0, 0, 22, 23, 26, 27, 13, 28, 29,
30, 31, 0, -2, 0, -2, -2, 0, 37, 38,
0, 0, 0, 0, 21, 0, -2, -2, -2, 0,
0, 0, 33, 0, 0, 0, 0, 0, 0, 18,
19, 20 };
#ifndef lint
static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83";
#endif not lint
#
# define YYFLAG -1000
# define YYERROR goto yyerrlab
# define YYACCEPT return(0)
# define YYABORT return(1)
/* parser for yacc output */
#ifdef YYDEBUG
int yydebug = 0; /* 1 for debugging */
#endif
YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
int yychar = -1; /* current input token number */
int yynerrs = 0; /* number of errors */
short yyerrflag = 0; /* error recovery flag */
yyparse() {
short yys[YYMAXDEPTH];
short yyj, yym;
register YYSTYPE *yypvt;
register short yystate, *yyps, yyn;
register YYSTYPE *yypv;
register short *yyxi;
yystate = 0;
yychar = -1;
yynerrs = 0;
yyerrflag = 0;
yyps= &yys[-1];
yypv= &yyv[-1];
yystack: /* put a state and value onto the stack */
#ifdef YYDEBUG
if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );
#endif
if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
*yyps = yystate;
++yypv;
*yypv = yyval;
yynewstate:
yyn = yypact[yystate];
if( yyn<= YYFLAG ) goto yydefault; /* simple state */
if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
yychar = -1;
yyval = yylval;
yystate = yyn;
if( yyerrflag > 0 ) --yyerrflag;
goto yystack;
}
yydefault:
/* default state action */
if( (yyn=yydef[yystate]) == -2 ) {
if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
/* look through exception table */
for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
while( *(yyxi+=2) >= 0 ){
if( *yyxi == yychar ) break;
}
if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
}
if( yyn == 0 ){ /* error */
/* error ... attempt to resume parsing */
switch( yyerrflag ){
case 0: /* brand new error */
yyerror( "syntax error" );
yyerrlab:
++yynerrs;
case 1:
case 2: /* incompletely recovered error ... try again */
yyerrflag = 3;
/* find a state where "error" is a legal shift action */
while ( yyps >= yys ) {
yyn = yypact[*yyps] + YYERRCODE;
if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
yystate = yyact[yyn]; /* simulate a shift of "error" */
goto yystack;
}
yyn = yypact[*yyps];
/* the current yyps has no shift onn "error", pop stack */
#ifdef YYDEBUG
if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
#endif
--yyps;
--yypv;
}
/* there is no state on the stack with an error shift ... abort */
yyabort:
return(1);
case 3: /* no shift yet; clobber input char */
#ifdef YYDEBUG
if( yydebug ) printf( "error recovery discards char %d\n", yychar );
#endif
if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
yychar = -1;
goto yynewstate; /* try again in the same state */
}
}
/* reduction by production